package com.spring.utils.api_v4.service;

import com.spring.utils.api_v4.pojo.DeptInfo;
import com.spring.utils.api_v4.pojo.Password;
import com.spring.utils.api_v4.pojo.Role;
import com.spring.utils.api_v4.pojo.UserInfo;
import com.spring.utils.api_v4.pojo.salary.DeptWage;
import com.spring.utils.api_v4.pojo.salary.EmployeeWage;
import org.springframework.cache.annotation.CacheEvict;

import javax.transaction.Transactional;
import java.util.List;

/**
 * 系统管理接口
 */
public interface ISystemService {

    /**
     * 查询部门列表
     * @return
     */
    List<DeptInfo> getDeptsAll();

    /**
     * 保存部门信息
     * @param dept
     */
    void saveDept(DeptInfo dept);

    /**
     * 根据编号获取部门信息
     * @param id
     * @return
     */
    DeptInfo getDeptById(int id);

    /**
     * 根据名称查询部门信息
     * @param name
     * @return
     */
    DeptInfo getDeptByName(String name);

    /**
     * 根据编号删除部门信息
     * @param id
     * @return
     */
    @CacheEvict(key = "#id")
    boolean deleteDeptById(int id);

    /**
     * 获取部门工资信息
     * @param dept
     * @return
     */
    DeptWage getDeptWage(DeptInfo dept);

    /**
     * 根据部门编号获取部门工资信息
     * @param deptId
     * @return
     */
    DeptWage getDeptWage(int deptId);

    /**
     * 获取全部部门工资信息
     * @return
     */
    List<DeptWage> getDeptWagesAll();

    /**
     * 保存部门工资信息
     * @param deptWage
     */
    void saveDeptWage(DeptWage deptWage);

    /**
     * 查询员工工资信息
     * @param user
     * @return
     */
    EmployeeWage getEmployeeWage(UserInfo user);

    /**
     * 保存员工工资信息
     * @param employeeWage
     */
    void saveEmployeeWage(EmployeeWage employeeWage);

    /**
     * 获取部门员工列表
     * @param dept
     * @return
     */
    List<UserInfo> getStaffOfDept(DeptInfo dept);

    /**
     * 根据编号查询用户信息
     * @param id
     * @return
     */
    UserInfo findUserById(String id);

    /**
     * 查询用户角色列表
     * @param userInfo
     * @return
     */
    List<Role> getUserRoles(UserInfo userInfo);

    /**
     * 判断用户是否有指定角色
     * @param user
     * @param role
     * @return
     */
    boolean hasRole(UserInfo user, String role);

    /**
     * 判断用户是否有指定角色
     * @param userId
     * @param role
     * @return
     */
    boolean hasRole(String userId, String role);

    /**
     * 获取用户密码
     * @param user
     * @return
     */
    Password getUserPwd(UserInfo user);

    /**
     * 保存密码
     * @param pwd
     */
    void savePwd(Password pwd);

    /**
     * 保存用户信息
     * @param userInfo
     */
    void saveUser(UserInfo userInfo);

    /**
     * 判断用户信息是否存在
     * @param idCard
     * @param phone
     * @return
     */
    boolean userInfoExist(String idCard, String phone);

    /**
     * 判断用户信息是否存在
     * @param id
     * @param idCard
     * @param phone
     * @return
     */
    boolean userInfoExist(String id, String idCard, String phone);

    /**
     * 删除用户信息
     * @param user
     */
    void deleteUser(UserInfo user);

    /**
     * 根据编号获取用户信息
     * @param userId
     * @return
     */
    UserInfo getUserById(String userId);

    /**
     * 重置密码
     * @param user
     */
    void resetUserPwd(UserInfo user);

    /**
     * 获取用户角色列表
     * @param id
     * @return
     */
    List<Role> getUserRoles(String id);

    /**
     * 根据编号删除用户信息
     * @param userId
     */
    void deleteUserById(String userId);

    /**
     * 查询部门用户列表
     * @param deptId
     * @return
     */
    List<UserInfo> getUsersByDeptId(int deptId);
}
